package controllers.Administrador;

import java.util.Collection;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import services.ComunidadDeVecinosService;
import services.MensajeComunidadService;
import controllers.AbstractController;
import domain.ComunidadDeVecinos;
import domain.MensajeComunidad;

@Controller
@RequestMapping("/mensajeComunidad/administrador")
public class MensajeComunidadAdministratorController extends AbstractController {
	@Autowired
	private ComunidadDeVecinosService comunidadDeVecinosService;

	@Autowired
	private MensajeComunidadService mensajeComunidadService;

	public MensajeComunidadAdministratorController() {
		super();
	}

	@RequestMapping(value = "/create", method = RequestMethod.GET)
	public ModelAndView create() {
		ModelAndView result;

		Collection<ComunidadDeVecinos> comunidades;
		MensajeComunidad mensajeComunidad;

		comunidades = comunidadDeVecinosService.findAll();
		mensajeComunidad = mensajeComunidadService.create();

		result = new ModelAndView("mensajeComunidad/create");
		result.addObject("requestURI",
				"mensajeComunidad/administrador/create.do");
		result.addObject("comunidades", comunidades);
		result.addObject("mensajeComunidad", mensajeComunidad);
		result.addObject("backURI", "/welcome/index.do");
		return result;
	}

	@RequestMapping(value = "/create", method = RequestMethod.POST, params = "save")
	public ModelAndView createSave(@Valid MensajeComunidad mensajeComunidad,
			BindingResult binding) {
		ModelAndView result;

		if (binding.hasErrors()) {

			result = createEditModelAndView(mensajeComunidad);

		} else {
			try {

				mensajeComunidadService.save(mensajeComunidad);
				result = new ModelAndView("redirect:../../");
			} catch (Throwable oops) {

				result = createEditModelAndView(mensajeComunidad,
						"mensajeComunidad.commit.error");
			}
		}

		return result;
	}

	// Ancillary methods
	protected ModelAndView createEditModelAndView(
			MensajeComunidad mensajeComunidad) {
		ModelAndView result;

		result = createEditModelAndView(mensajeComunidad, null);

		return result;
	}

	protected ModelAndView createEditModelAndView(
			MensajeComunidad mensajeComunidad, String message) {
		ModelAndView result;
		Collection<ComunidadDeVecinos> comunidades;
		result = new ModelAndView("mensajeComunidad/create");

		comunidades = comunidadDeVecinosService.findAll();
		result.addObject("comunidades", comunidades);
		result.addObject("mensajeComunidad", mensajeComunidad);
		result.addObject("message", message);

		return result;
	}
}
